package com.train.webadmin.app.dao;

import com.train.common.core.base.dao.BaseDaoMapper;
import com.train.webadmin.app.model.TPaperInfo;
import org.apache.ibatis.annotations.Param;

import java.util.*;

/**
 * 考试试卷数据操作访问接口。
 *
 * @author xulei
 * @date 2025-03-07
 */
public interface TPaperInfoMapper extends BaseDaoMapper<TPaperInfo> {

    /**
     * 批量插入对象列表。
     *
     * @param tPaperInfoList 新增对象列表。
     */
    void insertList(List<TPaperInfo> tPaperInfoList);

    /**
     * 获取过滤后的对象列表。
     *
     * @param tPaperInfoFilter 主表过滤对象。
     * @param orderBy 排序字符串，order by从句的参数。
     * @return 对象列表。
     */
    List<TPaperInfo> getTPaperInfoList(
            @Param("tPaperInfoFilter") TPaperInfo tPaperInfoFilter, @Param("orderBy") String orderBy);

    /**
     * 根据关联主表Id，获取关联从表数据列表。
     *
     * @param questionId 关联主表Id。
     * @param tPaperInfoFilter 从表过滤对象。
     * @param orderBy 排序字符串，order by从句的参数。
     * @return 从表数据列表。
     */
    List<TPaperInfo> getTPaperInfoListByQuestionId(
            @Param("questionId") Long questionId,
            @Param("tPaperInfoFilter") TPaperInfo tPaperInfoFilter,
            @Param("orderBy") String orderBy);

    /**
     * 根据关联主表Id列表，获取关联从表数据列表。
     *
     * @param questionIds 关联主表Id列表。
     * @param tPaperInfoFilter 从表过滤对象。
     * @param orderBy 排序字符串，order by从句的参数。
     * @return 从表数据列表。
     */
    List<TPaperInfo> getTPaperInfoListByQuestionIds(
            @Param("questionIds") List<Long> questionIds,
            @Param("tPaperInfoFilter") TPaperInfo tPaperInfoFilter,
            @Param("orderBy") String orderBy);

    /**
     * 根据关联主表Id，获取关联从表中没有和主表建立关联关系的数据列表。
     *
     * @param questionId 关联主表Id。
     * @param tPaperInfoFilter 过滤对象。
     * @param orderBy 排序字符串，order by从句的参数。
     * @return 与主表没有建立关联的从表数据列表。
     */
    List<TPaperInfo> getNotInTPaperInfoListByQuestionId(
            @Param("questionId") Long questionId,
            @Param("tPaperInfoFilter") TPaperInfo tPaperInfoFilter,
            @Param("orderBy") String orderBy);

    List<TPaperInfo> listPaperByClassId(Long classId);

    List<TPaperInfo> getStudentTPaperInfoList(@Param("studentId") Long studentId);
}
